/*
*
==============================================================================
*  Name        : 
*  Part of     : Omen Game Engine
*  Description : 
*  Version     : 1.0
*
*  Copyright (c) 2013 Lauri Kortevaara.
* 
==============================================================================
*/

#ifndef Omen_RENDERER_H
#define Omen_RENDERER_H

#include "OmenConfig.h"

#include <IOmenRenderer.h>

#include <vector>
#include <string>

#include <Windows.h>

#ifndef WinMessageHandler
    typedef int (__stdcall* WinMessageHandler)(HWND,UINT,WPARAM,LPARAM);
#endif

namespace Omen {
  class Kernel;

  class Renderer : public IRenderer {
    public: virtual ~Renderer() {}
    public: virtual void render(Omen::Kernel* pKernel) = 0;

    public: virtual void beginRendering() const = 0;
    public: virtual void render(Omen::ICamera* pCamera) const = 0;
    public: virtual void render(Omen::ILight** pLights, unsigned int numLights) const = 0;
    public: virtual void render(Omen::IModel** pCameras, unsigned int numModels) const = 0;
    public: virtual void endRendering() const = 0;

    public: virtual void setMessageCallback( WinMessageHandler fnPtr ) {};
    public: virtual unsigned long windowHandle() const = 0;
    }; // Dummy

} // namespace Omen  

#endif // Omen_RENDERER_H
